﻿using Mayfair.Core.Common.DI;

namespace Mayfair.Core.Common.Service
{
    public abstract class BasicService
    {
        /// <summary>
        /// データベースアクセスサービスを返却します
        /// </summary>
        /// <returns>データベースアクセスサービス</returns>
        public static BasicService GetService()
        {
            return DIContainerFactory.GetDIContainer().GetObject<BasicService>("DefaultBasicService");
        }

        /// <summary>
        /// プライマリキーに紐づく、永続化オブジェクトを返却します
        /// </summary>
        /// <typeparam name="T">永続化オブジェクトの型</typeparam>
        /// <param name="pk">プライマリキー</param>
        /// <returns>永続化オブジェクト</returns>
        public abstract T FindByPK<T>(object pk);

        /// <summary>
        /// オブジェクト群を永続化します
        /// </summary>
        /// <typeparam name="T">永続化オブジェクトの型</typeparam>
        /// <param name="objects">オブジェクト群</param>
        public abstract void Insert<T>(params T[] objects);

        /// <summary>
        /// 
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="objects"></param>
        public abstract void Update<T>(params T[] objects);

        /// <summary>
        /// 
        /// </summary>
        /// <typeparam name="T"></typeparam>
        /// <param name="objects"></param>
        public abstract void Delete<T>(params T[] objects);
    }
}
